/*****************************************************************************
 * MiniUI便捷常用方法
 ****************************************************************************/
var miniui = new _miniUtils();

function _miniUtils() {

	/************************************************************************
	 * 根据控件名称获取miniUI控件
	 * @constructor
	 * @this {getControl}
	 * @param {name} 控件名称
	 * @author fgg047 <9110530@qq.com>
	 * @since 2018-10-24
	 ************************************************************************/
	this.getControl = function (name) {
		var datagrid = mini.get(name);
		var classname = datagrid.el.className;
		// 如果是表格
		if (classname.indexOf("mini-datagrid") != -1) {
			datagrid.on("load", function (page) {
				if (page.text && page.text == "logining first") {
					http.gotoLogin();
				}
			});
		}
		return datagrid;
	}

	/************************************************************************
	 * 清除表格中的非用户数据
	 * @constructor
	 * @this {getCleanGridData}
	 * @param {datagrid} 表格
	 * @author fgg047 <9110530@qq.com>
	 * @since 2018-10-24
	 ************************************************************************/
	this.getCleanGridData = function (datagrid) {
		var data = datagrid.getData();
		for (var index in data) {
			for (var key in data[index]) {
				if (key.indexOf('_', 0) != -1) {
					delete data[index][key];
				}
			}
		}
		return data;
	}

	/************************************************************************
	 * 设置表格中的分页数据
	 * @constructor
	 * @this {setGridData}
	 * @param {datagrid} 表格
	 * @param {page} 页面数据
	 * @author fgg047 <9110530@qq.com>
	 * @since 2019-09-16
	 ************************************************************************/
	this.setGridData = function (datagrid, page) {
		if (page.success) {
			datagrid.setData(page.data);
			datagrid.setPageIndex(page.pageIndex);
			datagrid.setPageSize(page.pageSize);
			datagrid.setTotalCount(page.total);
		} else {
			this.showErrorMessageBox(page.message);
		}
	}

	/************************************************************************
	 * 刷新表格中的分页数据
	 * @constructor
	 * @this {updateGridData}
	 * @param {url} 请求地址
	 * @param {data} 请求参数
	 * @author fgg047 <9110530@qq.com>
	 * @since 2019-09-16
	 ************************************************************************/
	this.updateGridData = function (url, data) {
		http.post(url, data, function (page) {
			if (page.success) {
				datagrid.setData(page.data);
				datagrid.setPageIndex(page.pageIndex);
				datagrid.setPageSize(page.pageSize);
				datagrid.setTotalCount(page.total);
			} else {
				this.showErrorMessageBox(page.message);
			}
		});
	}

	/************************************************************************
	 * 清除表单中的非用户数据
	 * @constructor
	 * @this {getCleanFormData}
	 * @param {datagrid} 表格
	 * @author fgg047 <9110530@qq.com>
	 * @since 2018-10-24
	 ************************************************************************/
	this.getCleanFormData = function (data) {
		for (var key in data) {
			// debugger
			if (key.indexOf('_', 0) != -1) {
				delete data[key];
			}
		}
		return data;
	}

	/************************************************************************
	 * 批量设置表单中的数据（暂时没用）
	 * @constructor
	 * @this {setFormData}
	 * @param {form} 表单
	 * @param {data} 数据
	 * @author fgg047 <9110530@qq.com>
	 * @since 2019-08-14
	 ************************************************************************/
	this.setFormData = function (form, data) {
		form.setData(data);
		// batchSetForm.getFields()[0].el.className
		var list = form.getFields();
		console.log(data);
		for (var i = 0; i < list.length; i++) {
			var control = list[i];
			if (control.el.className.indexOf("mini-combobox") != -1) {
				console.log(control.getTextField());
				console.log(data[control.getTextField()]);
				console.log(data[control.getValueField()]);
				debugger
				control.setText(data[control.getTextField()]);
				control.setValue(data[control.getValueField()]);
			}
		}
	}

	/************************************************************************
	 * 获取表单的某个属性
	 * @constructor
	 * @this {setFormViewModel}
	 * @param {form} 表单
	 * @param {name} 属性名称
	 * @author fgg047 <9110530@qq.com>
	 * @since 2018-09-25
	 ************************************************************************/
	this.getFormField = function (form, name) {
		var fields = form.getFields();
		for (var i = 0, l = fields.length; i < l; i++) {
			if (fields[i].name == name) {
				return fields[i];
			}
		}
	}

	/************************************************************************
	 * 设置表单为只读模式
	 * @constructor
	 * @this {setFormViewModel}
	 * @param {form} 表单
	 * @author fgg047 <9110530@qq.com>
	 * @since 2018-09-20
	 ************************************************************************/
	this.setFormViewModel = function (form) {
		var fields = form.getFields();
		for (var i = 0, l = fields.length; i < l; i++) {
			var c = fields[i];
			if (c.setReadOnly)
				c.setReadOnly(true); //只读
			if (c.setIsValid)
				c.setIsValid(true); //去除错误提示
			if (c.addCls)
				c.addCls("asLabel"); //增加asLabel外观, 详见miniui/themes/mythemes/my-themes.css
		}
	}

	/************************************************************************
	 * 设置表单为编辑模式
	 * @constructor
	 * @this {setFormEditModel}
	 * @param {form} 表单
	 * @author fgg047 <9110530@qq.com>
	 * @since 2018-09-20
	 ************************************************************************/
	this.setFormEditModel = function (form) {
		var fields = form.getFields();
		for (var i = 0, l = fields.length; i < l; i++) {
			var c = fields[i];
			if (c.setReadOnly)
				c.setReadOnly(false);
			if (c.removeCls)
				c.removeCls("asLabel");
		}
		mini.repaint(document.body);
	}

	/************************************************************************
	 * 操作成功的通用提示
	 * @constructor
	 * @this {showSuccessTip}
	 * @param {content} 提示内容
	 * @author fgg047 <9110530@qq.com>
	 * @since 2018-09-20
	 ************************************************************************/
	this.showSuccessTip = function (content) {
		mini.showTips({
			content: content,
			state: 'success', // default、success、info、warning、danger
			x: 'center', // left、center、right
			y: 'top', // top、center、bottom
			timeout: 3000
		});
	}

	/************************************************************************
	 * 操作失败的通用提示
	 * @constructor
	 * @this {showFailTip}
	 * @param {content} 提示内容
	 * @author fgg047 <9110530@qq.com>
	 * @since 2018-09-20
	 ************************************************************************/
	this.showFailTip = function (content) {
		mini.showTips({
			content: content,
			state: 'warning', // default、success、info、warning、danger
			x: 'center', // left、center、right
			y: 'top', // top、center、bottom
			timeout: 3000
		});
	}

	/************************************************************************
	 * 提醒信息的通用提示
	 * @constructor
	 * @this {showInfoTip}
	 * @param {content} 提示内容
	 * @author fgg047 <9110530@qq.com>
	 * @since 2018-09-20
	 ************************************************************************/
	this.showInfoTip = function (content) {
		mini.showTips({
			content: content,
			state: 'info', // default、success、info、warning、danger
			x: 'center', // left、center、right
			y: 'top', // top、center、bottom
			timeout: 3000
		});
	}

	/************************************************************************
	 * 提示信息的通用提示
	 * @constructor
	 * @this {showInfoMessageBox}
	 * @param {message} 提示内容
	 * @author fgg047 <9110530@qq.com>
	 * @since 2018-09-20
	 ************************************************************************/
	this.showInfoMessageBox = function (message) {
		var title = "信息";
		var icon = "mini-messagebox-info";
		mini.showMessageBox({
			title: title,
			message: message,
			buttons: ["ok"],
			iconCls: icon
		});
	}

	/************************************************************************
	 * 提示信息的通用提示
	 * @constructor
	 * @this {showWarnMessageBox}
	 * @param {message} 提示内容
	 * @author fgg047 <9110530@qq.com>
	 * @since 2018-09-20
	 ************************************************************************/
	this.showWarnMessageBox = function (message) {
		var title = "警告";
		var icon = "mini-messagebox-warn";
		mini.showMessageBox({
			title: title,
			message: message,
			buttons: ["ok"],
			iconCls: icon
		});
	}

	/************************************************************************
	 * 提示信息的通用提示
	 * @constructor
	 * @this {showErrorMessageBox}
	 * @param {message} 提示内容
	 * @author fgg047 <9110530@qq.com>
	 * @since 2018-09-20
	 ************************************************************************/
	this.showErrorMessageBox = function (message) {
		var title = "错误";
		var icon = "mini-messagebox-error";
		mini.showMessageBox({
			title: title,
			message: message,
			buttons: ["ok"],
			iconCls: icon
		});
	}

	/************************************************************************
	 * 提示信息的通用提示
	 * @constructor
	 * @this {showLoadErrorMessageBox}
	 * @author fgg047 <9110530@qq.com>
	 * @since 2018-09-20
	 ************************************************************************/
	this.showLoadErrorMessageBox = function () {
		this.showErrorMessageBox("列表数据加载失败！");
	}

	/************************************************************************
	 * 提示信息的通用提示
	 * @constructor
	 * @this {showPageMessageBox}
	 * @param {page} http操作返回的Json对象
	 * @param {successMessage} 执行成功的提示消息，提供默认提示信息
	 * @param {callback} 提示信息关闭后的回调函数
	 * @author fgg047 <9110530@qq.com>
	 * @since 2019-03-05
	 ************************************************************************/
	this.showPageMessageBox = function (page, successMessage, callback) {
		var title = null;
		var icon = null;
		var mess = null;
		var back = null;
		if (arguments.length == 3) {
			mess = successMessage;
			back = callback;
		} else if (arguments.length == 2) {
			if (typeof arguments[1] === "function") {
				back = arguments[1];
			} else {
				mess = arguments[1];
			}
		}
		if (page.success) {
			title = "信息";
			icon = "mini-messagebox-info";
			if (mess == null) {
				mess = "操作成功！";
			}
		} else {
			title = "错误";
			icon = "mini-messagebox-error";
			if (mess == null) {
				mess = page.message;
			}
		}
		mini.showMessageBox({
			title: title,
			message: mess,
			buttons: ["ok"],
			iconCls: icon,
			callback: back
		});
	}

	/************************************************************************
	 * 数据处理中遮罩
	 * @constructor
	 * @param {message} 提示内容
	 * @author fgg047 <9110530@qq.com>
	 * @since 2019-01-21
	 ************************************************************************/
	this.mask = function (message) {
		mini.mask({
			el: document.body,
			cls: 'mini-mask-loading',
			html: message
		});
	}

	/************************************************************************
	 * 隐藏弹窗
	 * @constructor
	 * @param {id} 弹窗的ID
	 * @author fgg047 <9110530@qq.com>
	 * @since 2019-08-14
	 ************************************************************************/
	this.hide = function (id) {
		mini.get(id).hide();
	}

	/************************************************************************
	 * 打开选择数据弹窗
	 * @constructor
	 * @this {openDialog}
	 * @param {url} 窗体html文件
	 * @param {keys} 回写的字段名称，多个以逗号隔开
	 * @author fgg047 <9110530@qq.com>
	 * @since 2019-10-05
	 ************************************************************************/
	this.openDialog = function (url, keys) {
		var that = this;
		mini.open({
			url: ctx + url,
			title: "选择",
			width: 650,
			height: 550,
			onload: function () { },
			ondestroy: function (action) {
				if (action == "ok") {
					var iframe = this.getIFrameEl();
					var data = iframe.contentWindow.getData();
					data = mini.clone(data);
					// console.log(data);
					if (keys.indexOf(',') == -1) {
						mini.get(keys).setValue(data[keys]);
					} else {
						var arr = keys.split(',');
						for (var name of arr) {
							mini.get(name).setValue(data[name]);
						}
					}
				}
			}
		});
	}
}